/**
 * @file EntregaDAO.java
 * @brief Obtiene y actualiza la información de la BD referente a  las entregas de  medicamentos en farmacia.
 *
 * Copyright (C)  - April [2011]
 *
 * @author Fruela Palacio Pérez.
 * @version 01.01
 *
 * @footnote e-mail:  fruela@correo.ugr.es fruli_88@hotmail.com
 */

package GestorFarmacia;


import java.io.IOException;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import Servicios.Conexion;
import Definiciones.Definiciones;

/**
 *
 * @author Fruela
 * @brief Obtiene y actualiza la información de la BD referente a las entregas.
 */


/*Clase EntregaDAO*/
public class EntregaDAO {

    /* Métodos de clase */
    public  static void add ( Entrega e ) throws SQLException, IOException, ClassNotFoundException {
        String estado = e.getEstadoEntrega().toString();
        if(estado.equals("PENDIENTE")) estado = "p";
            else if(estado.equals("SUMINISTRADA"))estado = "s";
                     else if(estado.equals("NO_ENTREGADA"))estado = "n";
                        else estado = "c"; // Cancelada

        DateFormat formatoFecha = new  SimpleDateFormat("yyyy-MM-dd");

        Conexion.conectar();
        Conexion.actualizar("INSERT Entrega( fechaEntrega, idLineaReceta, idFarmaceutico, estado)"
                            + " VALUES ( \'" +formatoFecha.format(e.getFechaEntrega())+ "\'"
                            + "," +e.getIdLineaReceta()
                            + "," +e.getIdFarmaceutico()
                            + ",\'" +estado+ "\');");
	Conexion.desconectar();
    }


    public static void delete ( Entrega e ) throws SQLException, IOException, ClassNotFoundException {
        e.setEstadoEntrega(Definiciones.Estado.CANCELADA);
        Entrega.update(e);
    }


    public static void update ( Entrega e ) throws SQLException, IOException, ClassNotFoundException {
        String estado = e.getEstadoEntrega().toString();
        DateFormat formatoFecha = new  SimpleDateFormat("yyyy-MM-dd");

        if(estado.equals("PENDIENTE")) estado = "p";
            else if(estado.equals("SUMINISTRADA"))estado = "s";
                     else if(estado.equals("NO_ENTREGADA"))estado = "n";
                         else estado = "c"; //Cancelada
        
        Conexion.conectar();
	Conexion.actualizar("UPDATE Entrega SET fechaEntrega=\'" + formatoFecha.format(e.getFechaEntrega()) + "\'"
                                                 + ", idLineaReceta=" + e.getIdLineaReceta() + ""
                                                 + ", idFarmaceutico=" + e.getIdFarmaceutico() + ""
                                                 + ", estado=\'" + estado +"\'"
                                                 + " WHERE idEntrega="+e.getIdEntrega()+";");
	Conexion.desconectar();
    }


    public static Entrega get ( Integer iden ) throws SQLException, IOException, ClassNotFoundException {
        Entrega entrega_buscada = null;
        Conexion.conectar();
	ResultSet entrega = Conexion.consultar("SELECT * FROM Entrega WHERE Entrega.idEntrega="+iden+";");
	// Creamos la entrega  consultado de la BD
        if(entrega.next()){
            entrega_buscada = new Entrega();
            Definiciones.Estado estado = null;

            if(entrega.getString("estado").equals("p"))estado = Definiciones.Estado.PENDIENTE;
                else if(entrega.getString("estado").equals("s"))estado = Definiciones.Estado.SUMINISTRADA;
                    else if(entrega.getString("estado").equals("c"))estado = Definiciones.Estado.CANCELADA;
                        else estado = Definiciones.Estado.NO_ENTREGADA;

            entrega_buscada.setIdEntrega(entrega.getInt("idEntrega"));
            entrega_buscada.setFechaEntrega(entrega.getDate("fechaEntrega"));
            entrega_buscada.setEstadoEntrega(estado);
            entrega_buscada.setIdLineaReceta(entrega.getInt("idLineaReceta"));
            entrega_buscada.setIdFarmaceutico(entrega.getInt("idFarmaceutico"));

        }
        Conexion.desconectar();


        return entrega_buscada;
}


    public static Entrega[] get ( Integer iden, Date fecha,  Definiciones.Estado  estado) throws SQLException,
        IOException, ClassNotFoundException, ParseException {
        Entrega[] v_entregas = null;
        String busqueda = "";
        ArrayList<Entrega> entregas_1 = new ArrayList<Entrega>();
        Definiciones.Estado estado_ = null;
        DateFormat formatoFecha = new  SimpleDateFormat("yyyy-MM-dd");
        ResultSet entrega;

        // Generamos la consulta a la BD
        if(iden != null) {
            busqueda += "idEntrega=" + iden + "";
        }
        if(fecha != null){
            if(!busqueda.equals("")) busqueda += " AND ";
            busqueda += "fechaEntrega = \'"+ formatoFecha.format(fecha)+"\'";
        }
        if(estado != null){
            if(!busqueda.equals("")) busqueda += " AND ";
                if(estado.toString().equals("PENDIENTE")) busqueda += "estado=\'p\'";
                 else if(estado.toString().equals("SUMINISTRADA")) busqueda += "estado=\'s\'";
                    else if(estado.toString().equals("CANCELADA")) busqueda += "estado=\'c\'";
                        else busqueda += "estado=\'n\'"; // ESTADO  NO_ENTREGADA
        }

        Conexion.conectar();
	if(!busqueda.equals("")) entrega = Conexion.consultar("SELECT * FROM Entrega WHERE " + busqueda + ";");
        else entrega = Conexion.consultar("SELECT * FROM Entrega");

	// Creamos el listado de Medicamentos
        while(entrega.next()){//encontrado
            if(entrega.getString("estado").equals("p"))estado_ = Definiciones.Estado.PENDIENTE;
                else if(entrega.getString("estado").equals("s"))estado_ = Definiciones.Estado.SUMINISTRADA;
                    else if(entrega.getString("estado").equals("c"))estado_ = Definiciones.Estado.CANCELADA;
                        else estado_ = Definiciones.Estado.NO_ENTREGADA;
            entregas_1.add(new Entrega(entrega.getInt("idEntrega"), 
                                       formatoFecha.parse(entrega.getString("fechaEntrega")),
                                       entrega.getInt("idLineaReceta"),
                                       entrega.getInt("idFarmaceutico"),
                                       estado_));

        }
        Conexion.desconectar();

        // Devolvemos vector de medicamentos
        if(entregas_1.size()>0){
            v_entregas = new Entrega[entregas_1.size()];
            entregas_1.toArray(v_entregas);
        }
        return v_entregas;

    }
}

